Micron Document
░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░

I N T 1 1 · R E T I C U L U M

░░▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒░░

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Home Articles Members About
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ARTICLES / Reticulum over DNS (Iodine transport)

2026-05-29

Some of you may know about IP over DNS tunnels like iodine
https://github.com/yarrick/iodine
This technology is super useful in special use-cases like when connected
to captive portal wifi (such as on airlines) where internet access is
blocked, but DNS functions normally. Iodine creates an IP tunnel over
DNS queries and responses. The round-trip-time (RTT) is quite high, and
the bandwidth low (20kbps ish), but it may be the only option in some
cases.

I tried this out and can confirm that Reticulum over DNS works very
smooth!

Iodine supplies the IP link, while transport is done via a UDPInterface
(due to the high RTT)

Full Setup
You need a domain name and a server exposed on the internet via port
53/udp

Example domain: xample.com
Example external ip: 23.123.123.123

On your domain DNS setting, set your server external ip as the NS for a
subdomain, eg NS record iodine.example.com to 123.123.123.123

Iodine Server

Install iodine on the server:
sudo apt -y install iodine
Set iodine parameters. The IP should be an unused /24 subnet on your
host. Set a password
# /etc/default/iodine
START_IODINED="true"
IODINED_ARGS="-c 10.0.0.1 iodine.example.com"
IODINED_PASSWORD="secretpassword"
Enable and start the service
sudo systemctl unmask iodined
sudo systemctl enable iodined
sudo systemctl start iodined
Add a UDP interface to your reticulum interface.

Theoretically you could set the destination to a .255 address so that it
broadcasts to all connected iodine clients. Iodine clients will be
assigned an address based on the amount of connections. In our case the
first client is 10.0.0.2, second client at .3 etc.
[[Iodine UDP]]
type = UDPInterface
enabled = yes
listen_ip = 10.0.0.1
listen_port = 6969
forward_ip = 10.0.0.2 # or 10.0.0.255 for broadcast
forward_port = 6969
mode = access_point

We set the mode to access_point to reduce the amount of traffic to a
minimum.

Iodine Client
Install iodine on the client machine and start the connection

sudo apt -y install iodine
sudo iodine -f -P secretpassword iodine.example.com

Check that you can ping the server:

ping 10.0.0.1

Add the interface to your reticulum config
[[Iodine UDP]]
type = UDPInterface
enabled = yes
listen_ip = 0.0.0.0
listen_port = 6969
forward_ip = 10.0.0.1
forward_port = 6969
mode = roaming

Start nomadnet and observe that there is traffic going in and out

Results
Messaging and nomadnet browsing works fine. It may be a good idea to
have this as a backup solution and not use it 24/7 as some domain
resolvers may block the domain due to abuse concerns etc.


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
I N T 1 1 · 2 0 2 6